﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using SistemaGO_Library.Persistencia.BD;

namespace SistemaGO_Library.Entidades.Cancelamento
{
    class RepositorioCancelamento : IRepositorioCancelamento
    {
        private BD bd = new BD();

        //Descrição: Método que é usado nas regras de negócio do sistema identificando se um cancelamento que o mesmo está querendo inserir ou procurar já existe no banco para evitar o cadastro em duplicidade.
        //Valores: cod = atributo identificador do cancelamento que vai dizer se existe ou não.
        public bool existeCancelamento(int cod) {
            string sql = "SELECT cancelamento_cod FROM tb_cancelamento WHERE cancelamento_cod = '" + cod + "' ";
            using (SqlConnection conexao = new SqlConnection("Data Source=(local);Initial Catalog=SistemaGO;Integrated Security=True")) {
                conexao.Open();
                SqlCommand comando = new SqlCommand(sql, conexao);
                SqlDataReader dr = comando.ExecuteReader();
                int contador = 0;
                while (dr.Read()) {
                    string exite = dr["cancelamento_cod"].ToString();
                    contador = contador + 1;
                }

                if (contador > 0) {
                    return true;
                } else {
                    return false;
                }
            }
        }

        //Descrição: Método que realiza inserção de um cancelamento no banco de dados.
        //Valores: can = cancelamento passado para que seja realizada a inserção caso ele esteja conforme com todas as regras de negócio.
        public void inserirCancelamento(Cancelamento can) {
            StringBuilder sql = new StringBuilder();
            sql.Append("INSERT INTO tb_cancelamento (usu_login_responsavel, ocorrencia_cod, cancelamento_data, cancelamento_descricao");
            sql.Append("VALUES ('" + can.Usu_login_responsavel + "', " + can.Ocorrencia_cod + ", '" + can.Cancelamento_data + "', '" + can.Cancelamento_descricao + "'");
            bd.rodarComando(sql.ToString());
        }

        //Descrição: Método que realiza busca de um cancelamento no banco de dados.
        //Valores: cod = codigo passado para que seja realizada a busca.
        public Cancelamento buscarCancelamento(int cod) {
            Cancelamento cancelamento = new Cancelamento();
            cancelamento = null;
            string sql = "SELECT * FROM tb_cancelamento WHERE cancelamento_cod = " + cod + "";

            using (SqlConnection conexao = new SqlConnection("Data Source=(local);Initial Catalog=SistemaGO;Integrated Security=True")) {
                conexao.Open();
                SqlCommand comando = new SqlCommand(sql, conexao);
                SqlDataReader dr = comando.ExecuteReader();
                while (dr.Read()) {
                    cancelamento.Cancelamento_cod = int.Parse(dr["cancelamento_cod"].ToString());
                    cancelamento.Usu_login_responsavel = dr["usu_login_responsavel"].ToString();
                    cancelamento.Ocorrencia_cod = int.Parse(dr["ocorrencia_cod"].ToString());
                    cancelamento.Cancelamento_data = DateTime.Parse(dr["cancelamento_data"].ToString());
                    cancelamento.Cancelamento_descricao = dr["cancelamento_descricao"].ToString();
                }
                return cancelamento;
            }
        }

        //Descrição: Método que realiza alteração de um cancelamento no banco de dados.
        //Valores: cod = codigo passado para que seja realizada a busca de qual cancelamento ele irá alterar, novoCancelamento = novo cancelamento que será inserido no lugar do antigo.
        public void alterarCancelamento(int cod, Cancelamento novoCancelamento) {
            string sql;
            sql = "UPDATE tb_cancelamento SET usu_login_responsavel = '" + novoCancelamento.Usu_login_responsavel + "', ocorrencia_cod = " + novoCancelamento.Ocorrencia_cod + ", cancelamento_data = '" + novoCancelamento.Cancelamento_data.ToString("MM/dd/yyyy") + "', cancelamento_descricao = '" + novoCancelamento.Cancelamento_descricao + "' WHERE cancelamento_cod = " + cod + " ";
            bd.rodarComando(sql);
        }

        //Descrição: Método que realiza exclusão de um cancelamento no banco de dados.
        //Valores: cod = codigo passado para que seja realizada a busca no banco para exclusão.
        public void excluirCancelamento(int cod) {
            string sql;
            sql = "DELETE FROM tb_cancelamento WHERE cancelamento_cod = " + cod + "";
            bd.rodarComando(sql);
        }
    }
}
